/*
 * File:   NinmanGame.h
 * Author: guilherme
 *
 * Created on April 27, 2011, 11:07 AM
 */


#ifndef NINMANGAME_H
#define	NINMANGAME_H

#include "NinmanConfig.h"
#include <list>
#include <stack>
#define subiu 1
#define desceu -1
#define direita 2
#define esquerda -2
#define WHITE makecol(0, 0, 0)
#define TRANSPARENTE makecol (255 ,0 ,255)

class NinmanGame {
public:
    typedef struct {
        int x, y;
    } PONTO;

    PONTO valor(int a, int b) {
        PONTO P;
        P.x = a;
        P.y = b;
        return P;
    }

    typedef struct {
        const char* nome;
        const char* lab;
        int Ninman_color;
        bool power, fruit;
        int points, sentido, linhas, colunas, vida, powertime;
        PONTO ghost, ghost1, ghost5, ghost2, ghost3, Pninman;
    } PLAYER;

    NinmanGame(NinmanConfig conf);
private:

    typedef struct {
        BITMAP* direita1;
        BITMAP* direita2;
        BITMAP* direita3;
        BITMAP* direita4;
        BITMAP* direita5;
        BITMAP* direita6;
        BITMAP* esquerda1;
        BITMAP* esquerda2;
        BITMAP* esquerda3;
        BITMAP* esquerda4;
        BITMAP* esquerda5;
        BITMAP* esquerda6;
        BITMAP* cima1;
        BITMAP* cima2;
        BITMAP* cima3;
        BITMAP* cima4;
        BITMAP* cima5;
        BITMAP* cima6;
        BITMAP* baixo1;
        BITMAP* baixo2;
        BITMAP* baixo3;
        BITMAP* baixo4;
        BITMAP* baixo5;
        BITMAP* baixo6;
    } NINMAN;






    NINMAN Ninman_bit;
    std::string* matriz;
    int venceu, vida, powertime, linhas, colunas, sentido, pontos, sentido2;
    PONTO ghost, ghost1, ghost2, ghost3, ghost5, Ninman;
    bool power;
    BITMAP *Bit_ghost;
    BITMAP *Bit_ghost1;
    BITMAP *Bit_ghost2;
    BITMAP *Bit_ghost3;
    BITMAP *Bit_ghost5;
    PLAYER player;

    void DeleteFruit();
    void Inicio();
    void LoadMatriz();
    void NewFruit();
    std::list <PONTO> MoverFantasma1(std::list <PONTO> pilha1);
    std::list <PONTO> MoverFantasma3(std::list <PONTO> pilha3);
    std::list <PONTO> MoverFantasma(std::list <PONTO> pilha);
    std::list <PONTO> MoverFantasma2(std::list <PONTO> pilha2);
    void GameOptions();
    void DestroyerPlayer();
    bool Venceu();
    PONTO RandomMove(PONTO Ghost);
    void EatGhost(int x);
    void SaveMatriz();
    void SaveGame();
    void DrawOptions(int y);
    void LoadPlayer();
    const char* GetLab(PLAYER player);
    bool CheckWinner();
    PONTO * FindGhost();
    PONTO procurarNinman();
    int Mover(int NextMove);
    void PowerOn();
    void MoverFantasma5();
    void LoadLab(const char* file_name);
    void LoadBitmaps(int x);
    void LoadGhosts();
    int LerMovimento(int NextMove);
    void DrawLab();
    bool banlist(std::list <PONTO> ban, int a, int b);



};

#endif	/* NINMANGAME_H */

